package com.woniuxy.lab.woniu_lab.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.woniuxy.lab.woniu_lab.model.Range;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.lab.woniu_lab.model.User;
import com.woniuxy.lab.woniu_lab.service.dto.ExperDto;
import com.woniuxy.lab.woniu_lab.service.dto.CtfLeaderBoardDto;
import com.woniuxy.lab.woniu_lab.service.dto.RangeDto;
import com.woniuxy.lab.woniu_lab.service.dto.rangeDto.GetRangeDto;
import com.woniuxy.lab.woniu_lab.service.dto.userDto.ExperRankingsDto;

import java.util.List;

/**
 * <p>
 * 靶场表 服务类
 * </p>
 *
 * @author Silas
 * @since 2023-03-15
 */
public interface RangeService extends IService<Range> {

    /**
     * 根据难度查询靶场
     * @param page 页码
     * @param size 每页显示数
     * @param level 难度
     * @return IPage<RangeDto>
     */
    IPage<RangeDto> queryRangeByLevel(Integer page, Integer size, String level);

    /**
     * 根据分类条件查询靶场
     * @param page 页码
     * @param size 每页显示数
     * @param type 所属分类
     * @return IPage<RangeDto>
     */
    IPage<RangeDto> queryRangeByType(Integer page, Integer size, String type);

    /**
     * 根据分类条件查询靶场
     * @param page 页码
     * @param size 每页显示数
     * @param condition 所属分类
     * @return IPage<RangeDto>
     */
    IPage<RangeDto> queryRangeByCondition(Integer page, Integer size, String condition);

    /**
     * 根据ID查询靶场
     * @param rangeId ID
     * @return RangeDto
     */
    RangeDto findRangeById(Integer rangeId);

    /**
     * 购买靶场
     * @param rangeId 靶场ID
     * @return RangeDto 靶场详情
     */
    void payRange(Integer rangeId,String password) throws Exception;

    IPage<GetRangeDto> getNewExperiment(IPage<Range> rangeIPage);

    IPage<GetRangeDto> getHotExper(IPage<Range> rangeIPage);

    IPage<GetRangeDto> getExperOrderByMoney(IPage<Range> rangeIPage, Integer sort);

    IPage<GetRangeDto> getExperByLevel(IPage<Range> rangeIPage, String level);

    IPage<GetRangeDto> getExperByType(IPage<Range> rangeIPage, String rangeType);

    IPage<GetRangeDto> getExperByName(IPage<Range> rangeIPage, String name);

    List<ExperRankingsDto> experRankings();

    IPage<GetRangeDto> getNewCTF(IPage<Range> rangeIPage);

    IPage<GetRangeDto> getHotCTF(IPage<Range> rangeIPage);

    IPage<GetRangeDto> getCTFOrderByMoney(IPage<Range> rangeIPage, Integer sort);

    /**
     * CTF积分排行榜
     * @return List<CtfLeaderBoardDto>
     */
    IPage<CtfLeaderBoardDto> ctfLeaderboard();

    IPage<ExperDto> getNewExper(Integer page, Integer size);

    String startup(User user, Integer rangeId);

    String downloadExper(Integer userId, Integer rangeId);

    /**
     * 测试php+mysql5启动
     * @
     * @return String
     *
     */
    String startCompose(User user,Range range);

}
